package leetcode; /**
 * description:
 * author:张腾
 * date:2021-06-10
 */

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * 给你二叉树的根节点 root 和一个整数目标和 targetSum ，找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径
 */
public class leetcode113 {

    List<List<Integer>> res = new ArrayList<>();
    Deque<Integer> path = new ArrayDeque<>();
    public List<List<Integer>> pathSum(TreeNode root, int sum) {

        dfs(root,sum);
        return res;
    }

    public void dfs(TreeNode root,int target){
        if (root==null) return;

        path.add(root.val);
        target -= root.val;
        if (target==0 && root.left==null && root.right==null){
            res.add(new ArrayList<>(path));
            path.removeLast();
            return;
        }
        dfs(root.left,target);
        dfs(root.right,target);
        //target是每一层的私有变量，回溯时不需要加回去
        path.removeLast();
    }

}
